package qc.module.duty.mapper;


import org.mapstruct.IterableMapping;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;
import qc.module.duty.dto.group.DutyGroupDto;
import qc.module.duty.entity.DutyGroup;

import java.util.List;

@Mapper
public interface DutyGroupMapper {
    DutyGroupMapper MAPPER = Mappers.getMapper(DutyGroupMapper.class);


    @Mapping(target = "deptid", source = "dept")
    @Mapping(target = "deptname", ignore = true)
    DutyGroupDto toDto(DutyGroup en);

    @IterableMapping(qualifiedByName = "EntityToDutyGroupDto")
    List<DutyGroupDto> toDtoList(List<DutyGroup> list);
    
    
    @Mapping(target = "dept", source = "deptid")
    DutyGroup toEntity(DutyGroupDto dto);


    /**
     * Entity转换为栏目Dto
     *
     * @return CategoryDto
     * @author QcCheng Tech
     */
    @Named("EntityToDutyGroupDto")
    default DutyGroupDto EntityToDutyGroupDto(DutyGroup dutyGroup) {
        int odr = dutyGroup.getOdr();
        if (odr < 0 || odr > 99) {
            dutyGroup.setOdr(null);
        }
        // Entity转换Dto
        DutyGroupDto dutyGroupDto = DutyGroupMapper.MAPPER.toDto(dutyGroup);
        return dutyGroupDto;
    }

    /**
     * DTO转换为Entity
     *
     * @param dto 值班组Dto
     * @return 值班组Entity
     * @author QuCheng Tech
     */
    default DutyGroup DutyGroupDtoToEntity(DutyGroupDto dto) {
        //DTO转换为Entity
        DutyGroup dutyGroup = DutyGroupMapper.MAPPER.toEntity(dto);
        //判断栏目排序号可以为空或传入的不是数值；后台控制有效值在1~99，输入无效时设置数据库中为100
        if (dto.getOdr() == 0) {
            dutyGroup.setOdr(100);
        } else {
            try {
                int order = dto.getOdr();
                if (order < 1 || order > 100) {
                    dutyGroup.setOdr(100);
                } else {
                    dutyGroup.setOdr(order);
                }
            } catch (NumberFormatException e) {
                dutyGroup.setOdr(100); //输入无效值设置数据库中为100
            }
        }

        if (dto.getCol() == 0) {
            dutyGroup.setCol(1);
        }

        return dutyGroup;
    }


}
